<?php
namespace Grafika;

/**
 * Holds the color information.
 *
 * @package Grafika
 */
class Color
{
    /**
     * @var string Hex string: #FFFFFF
     */
    protected $hexString;

    /**
     * @var float Transparency value 0-1
     */
    protected $alpha;

    /**
     * Color constructor.
     *
     * @param string $hexString Hex string
     * @param float  $alpha     Transparency value 0-1
     */
    public function __construct($hexString = '', $alpha = 1.0)
    {
        $this->hexString = $hexString; // TODO: Validate hexstring
        $this->alpha = $alpha;
    }

    /**
     * Get RGB array
     *
     * @return array Contains array($r, $g, $b)
     */
    public function getRgb()
    {
        return $this->hexToRgb($this->hexString);
    }

    /**
     * Get RGBA array
     *
     * @return array Contains array($r, $g, $b, $a)
     */
    public function getRgba()
    {
        $rgba = $this->hexToRgb($this->hexString);
        $rgba[] = $this->alpha;

        return $rgba;
    }

    /**
     * Convert hex string to RGB
     *
     * @param string $hex Hex string. Possible values: #ffffff, #fff, fff
     *
     * @return array Contains (RGB) values red, green and blue
     */
    public function hexToRgb($hex)
    {
        $hex = ltrim($hex, '#'); // Remove #

        if (strlen($hex) == 3) {
            $r = hexdec(substr($hex, 0, 1) . substr($hex, 0, 1));
            $g = hexdec(substr($hex, 1, 1) . substr($hex, 1, 1));
            $b = hexdec(substr($hex, 2, 1) . substr($hex, 2, 1));
        } else {
            $r = hexdec(substr($hex, 0, 2));
            $g = hexdec(substr($hex, 2, 2));
            $b = hexdec(substr($hex, 4, 2));
        }

        return [$r, $g, $b]; // Returns an array with the rgb values
    }

    /**
     * Get hex string.
     *
     * @return string
     */
    public function getHexString()
    {
        return $this->hexString;
    }

    /**
     * Set hex string.
     *
     * @param string $hexString
     */
    public function setHexString($hexString)
    {
        $this->hexString = $hexString;
    }

    /**
     * Alpha value.
     *
     * @return float
     */
    public function getAlpha()
    {
        return $this->alpha;
    }

    /**
     * @param float $alpha
     */
    public function setAlpha($alpha)
    {
        $this->alpha = $alpha;
    }
}
